

fileprivate func renderImage(image:UIImage, filterName:String) -> UIImage? {
    // 1 - copy cgImage from image
    let sourceImage = CIImage(cgImage: image.cgImage!)
    
    // 2 - init filter
    let filter = CIFilter(name: filterName)
    filter?.setDefaults()
    filter?.setValue(sourceImage, forKey: kCIInputImageKey)
    
    if filter == nil { return nil}
    
    // 3 - init context
    let context = CIContext(options: nil)
    
    // 4 - output filtered image
    let outputCGImage = context.createCGImage(filter!.outputImage!, from: filter!.outputImage!.extent)
    if  outputCGImage != nil {
        return UIImage(cgImage: outputCGImage!)
    } else {
        return nil
    }
}
還沒有看到文章介紹有什麼濾鏡可以用,不過我們可以把他們的名稱以及對應的參數印出來。
Filter Names
CIFilter.filterNames(inCategory: kCICategoryBuiltIn)
相關的參數也能通過 filter 獲得
let filter = CIFilter(name: filterName)
filter.inputKeys
filter.outputKeys
filter.attributes
有時候我們也會混合使用濾鏡,比如對一張照片同時用了棕褐色濾鏡 + 加光亮度濾鏡。